home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 2010 April
/
PCWorld0410.iso
/
pluginy Firefox
/
8434
/
8434.xpi
/
chrome
/
content
/
domiOverlay.js
< prev
next >
Wrap
Text File
|
2008-11-15
|
4KB
|
112 lines
var googleredesignedDomi = {
addSelectorMenuItem:function (popup, selector) {
var menuitem = document.createElementNS(googleredesignedCommon.XULNS, "menuitem");
menuitem.setAttribute("label", selector);
menuitem.setAttribute("oncommand", "googleredesignedDomi.copySelectorToClipboard(event)");
popup.appendChild(menuitem);
},
copySelectorToClipboard:function (event) {
Components.classes['@mozilla.org/widget/clipboardhelper;1'].getService(Components.interfaces.nsIClipboardHelper).copyString(event.target.getAttribute("label"));
},
generateSelectors:function (event) {
var node = viewer.selectedNode;
if (!(node instanceof Element)) {
return;
}
var popup = event.target;
googleredesignedDomi.addSelectorMenuItem(popup, node.nodeName);
if (node.hasAttribute("id")) {
googleredesignedDomi.addSelectorMenuItem(popup, "#" + node.getAttribute("id"));
}
if (node.hasAttribute("class")) {
var classes = node.getAttribute("class").split(/\s+/);
googleredesignedDomi.addSelectorMenuItem(popup, "." + classes.join("."));
}
if (node.attributes.length > 1 ||
(node.attributes.length == 1 &&
node.attributes[0].name != "id" &&
node.attributes[0].name != "class")) {
var selector = node.nodeName;
for (var i = 0; i < node.attributes.length; i++) {
if (node.attributes[i].name != "id") {
selector += "[" + node.attributes[i].name + "=\"" + node.attributes[i].value + "\"]";
}
}
googleredesignedDomi.addSelectorMenuItem(popup, selector);
}
if (!node.hasAttribute("id")) {
googleredesignedDomi.addSelectorMenuItem(popup, googleredesignedDomi.getPositionalSelector(node));
}
},
getParentPositionalSelector:function (node) {
if (node.parentNode instanceof Document) {
return "";
}
return googleredesignedDomi.getPositionalSelector(node.parentNode) + " > ";
},
getPositionalSelector:function (node) {
if (node instanceof Document) {
return "";
}
if (node.hasAttribute("id")) {
return "#" + node.getAttribute("id");
}
var uniqueChild = true;
var nodeName = node.nodeName;
for (var i = 0; i < node.parentNode.childNodes.length; i++) {
var currentNode = node.parentNode.childNodes[i];
if (!(currentNode instanceof Element)) {
continue;
}
if (node != currentNode && node.nodeName == currentNode.nodeName) {
uniqueChild = false;
break;
}
}
if (uniqueChild) {
return googleredesignedDomi.getParentPositionalSelector(node) + node.nodeName;
}
if (googleredesignedDomi.isCSSFirstChild(node)) {
return googleredesignedDomi.getParentPositionalSelector(node) + node.nodeName + ":first-child";
}
if (googleredesignedDomi.isCSSLastChild(node)) {
return googleredesignedDomi.getParentPositionalSelector(node) + node.nodeName + ":last-child";
}
var selectorWithinSiblings = "";
for (var i = 0; i < node.parentNode.childNodes.length; i++) {
var currentNode = node.parentNode.childNodes[i];
if (!(currentNode instanceof Element)) {
continue;
}
if (currentNode == node) {
selectorWithinSiblings += node.nodeName;
break;
}
if (googleredesignedDomi.isCSSFirstChild(currentNode)) {
selectorWithinSiblings += currentNode.nodeName + ":first-child + ";
} else {
selectorWithinSiblings += currentNode.nodeName + " + ";
}
}
return googleredesignedDomi.getParentPositionalSelector(node) + selectorWithinSiblings;
},
isCSSFirstChild:function (node) {
for (var i = 0; i < node.parentNode.childNodes.length; i++) {
var currentNode = node.parentNode.childNodes[i];
if (currentNode instanceof Element) {
return currentNode == node;
}
}
return false;
},
isCSSLastChild:function (node) {
for (var i = node.parentNode.childNodes.length - 1; i >= 0; i--) {
var currentNode = node.parentNode.childNodes[i];
if (currentNode instanceof Element) {
return currentNode == node;
}
}
return false;
}
}